package com.sna.snaapplication.controller.UserSystem;


import com.sna.snaapplication.entity.R;
import com.sna.snaapplication.entity.usercore.Role;
import com.sna.snaapplication.entity.usercore.User;
import com.sna.snaapplication.entity.usercore.core.PwdString;
import com.sna.snaapplication.entity.usercore.core.UpdateData;
import com.sna.snaapplication.mapper.UserMapper;
import com.sna.snaapplication.service.UserSys.RoleService;
import com.sna.snaapplication.service.UserSys.SysUserService;
import com.sna.snaapplication.utils.ThreadLocalUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;
/*
* 当前用户个人页面
* */
@RestController

@RequestMapping("/user")
public class SysUserController {

    @Autowired
    SysUserService sysUserService;
    @Autowired
    UserMapper userMapper;
    @Autowired
    private RoleService roleService;

    /*
     * 普通用户 and 管理员
     * */

    //获取当前用户数据--个人中心页面 个人信息 用户名称 手机号码 邮箱 角色 创建日期
    @GetMapping("/userInfo")
    public R getInfo(){
        Map<String,Object> map= ThreadLocalUtil.get();
        //获取的是拦截器里面ThreadLocal得到的map类型
        String username = (String) map.get("username");

        User user = userMapper.findByUserName(username);

        System.out.println("user获取当前用户"+user);
        if(user!=null){
            //把用户的角色添加到roles中
            List<Role> rolelist = new ArrayList<>();
            Role role=roleService.FindByUserId(user.getUserId());
            rolelist.add(role);

            System.out.println(rolelist);
            user.setRoles(rolelist);
        }

        System.out.println(
                "当前用户为:"+username
        );
        return R.ok(user);
    }

    //获取当前用户基本资料 用户昵称 手机号码 邮箱 性别
    @GetMapping("/getUser")
    public R getUserProfile() {
        Map<String,Object> map= ThreadLocalUtil.get();
        //获取的是拦截器里面ThreadLocal得到的map类型
        String username = (String) map.get("username");

        User user = userMapper.findByUserName(username);

        // 构建返回的数据，只包含需要的字段
        Map<String, Object> profile = Map.of(
                "nickName", user.getNickName(),
                "phonenumber", user.getPhonenumber(),
                "email", user.getEmail(),
                "sex", user.getSex()
        );

        return R.ok(profile);
    }


    //修改用户密码  旧密码 新密码 确认新密码
    @PostMapping("/updatePwd")
    public R updatPwd(@RequestBody PwdString pwdString,@RequestHeader("Authorization") String token){
        return sysUserService.updatePwd(pwdString,token);
    }


    //修改当前用户基本资料  用户昵称 手机号码 邮箱 性别
    @PostMapping("/updateUser")
    public R updateUserProfile(@RequestBody UpdateData updateData) {
        // 调用服务层方法更新用户信息
       return sysUserService.updateUserProfile(updateData);

    }

    //修改用户头像

}
